/*
 * Copyright (c) 2012 SUBSECRETARIA DEFENSORIA DEL ESPACIO PUBLICO - SDEP.
 * All Rights Reserved.
 * This software is the confidential and proprietary information of SDEP
 * Developed By CONSTULT-SOFT S.A, Development Team 2012.
 *
 */
package co.gov.medellin.sdep.sisdep.domain.gestion;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import co.gov.medellin.sdep.sisdep.common.AppConstants;
import co.gov.medellin.sdep.sisdep.domain.BaseController;
import co.gov.medellin.sdep.sisdep.domain.MessageModalWindowController;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstGrupoFamiliarException;
import co.gov.medellin.sdep.sisdep.gestion.exception.EstGrupoFamiliarRuntimeException;
import co.gov.medellin.sdep.sisdep.gestion.exception.SolicitudException;
import co.gov.medellin.sdep.sisdep.gestion.service.IEstGrupoFamiliarService;
import co.gov.medellin.sdep.sisdep.gestion.service.ISolicitudService;
import co.gov.medellin.sdep.sisdep.model.EstGrupoFamiliar;
import co.gov.medellin.sdep.sisdep.model.Solicitud;
import co.gov.medellin.sdep.sisdep.model.comp.EstSocioEconomicoComp;

/**
 * @author Usuario
 * 
 */
public class EstGrupoFamiliarController extends BaseController implements
		Serializable {

	/**
	 * generated serial version
	 */
	private static final long serialVersionUID = -3285110767384990403L;

	/**
	 * Constructor por defecto, inicializa los elemento basicos del Controlador
	 */
	public EstGrupoFamiliarController() {
		cleanSearchValues();
		cleanValues();
		this.estGrupoFamiliarListModel = new ListDataModel();
	}

	/** bean para el manejo del formulario de creacion/edicion. EstSocioEconomico */
	private EstSocioEconomicoComp estSocioEconomico = new EstSocioEconomicoComp();

	/** bean para el manejo del formulario de busqueda EstGrupoFamiliar */
	private EstGrupoFamiliar estGrupoFamiliarSearch = new EstGrupoFamiliar();

	/** Objeto contenedor del listado de EstGrupoFamiliar luego de una consulta. */
	private DataModel estGrupoFamiliarListModel;

	/** bean para el manejo del formulario de creacion/edicion. EstGrupoFamiliar */
	private EstGrupoFamiliar estGrupoFamiliar = new EstGrupoFamiliar();

	/** instancia de servicio estGrupoFamiliarService */
	private IEstGrupoFamiliarService estGrupoFamiliarService;
	
	/** instancia de servicio solicitudService */
	private ISolicitudService solicitudService;
	
	/** instancia de la solicitud Service */
	private Solicitud solicitud;

	// --------------------------------------------------------------------
	// --- metodos para atender acciones init()
	// --------------------------------------------------------------------

	/**
	 * 
	 * @return String
	 */
	public String searchEstGrupoFamiliarByKey() {
		String msg = "";
		
		this.estSocioEconomico = (EstSocioEconomicoComp) getSessionObject("estSocioEconomico");
		//Asignamos el valor del estudio socio economico al formulario de
		//Gestion de grupo familiar para que filtre el grupo familiar correcto
		if(getEstSocioEconomico() != null){
			getEstGrupoFamiliarSearch().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		}else{
			getEstGrupoFamiliarSearch().setIdEstSocioEconomico(new Long(0));
		}
		
		try {
			List valores = null;
			valores = getEstGrupoFamiliarService().load(1, 10,
					this.estGrupoFamiliarSearch);
			this.estGrupoFamiliarListModel.setWrappedData(valores);
		} catch (Exception e) {
			msg = e.getMessage();
			e.printStackTrace(System.err);
		}
		if (this.estGrupoFamiliarListModel.getWrappedData() == null) {
			if(msg.equals("")){
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		} else {
			if (((List) this.estGrupoFamiliarListModel.getWrappedData()).isEmpty()) {
				msg = AppConstants.NO_RECORDS_FOUND;
			}
		}
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage(msg, null, null);
		return AppConstants.EST_GRUPO_FAMILIAR_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String create() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.estGrupoFamiliar.getId().longValue() == 0L) {
				getEstGrupoFamiliarService().insert(this.estGrupoFamiliar);
				msg = AppConstants.SUCCESS_CREATE;
			}
		} catch (EstGrupoFamiliarException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstGrupoFamiliarRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Estudio socio econ\u00F3mico integrante grupo familiar " + msg, null, null);
		return AppConstants.EST_GRUPO_FAMILIAR_SEARCH_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String update() {
		String msg = AppConstants.DEFAULT_ERROR;
		try {
			if (this.estGrupoFamiliar.getId().longValue() != 0L) {
				getEstGrupoFamiliarService().update(this.estGrupoFamiliar);
				msg = AppConstants.SUCCESS_UPDATE;
			}
		} catch (EstGrupoFamiliarException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		} catch (EstGrupoFamiliarRuntimeException e) {
			msg = e.getEndUserMessage();
			e.printStackTrace(System.err);
		}
		cleanValues();
		((MessageModalWindowController) getBean("messageController"))
				.setSuccessMessage("- Estudio socio econ\u00F3mico - integrante grupo familiar " + msg, null, null);
		return AppConstants.EST_GRUPO_FAMILIAR_SEARCH_VIEW;
	}

	// --------------------------------------------------------------------
	// --- metodos para atender acciones end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public String createEstGrupoFamiliar() {
		estGrupoFamiliar = new EstGrupoFamiliar();
		cleanValues();
		//Asignamos el estudio socio economico padre
		setEstSocioEconomico((EstSocioEconomicoComp) getSessionObject("estSocioEconomico"));
		getEstGrupoFamiliar().setIdEstSocioEconomico(getEstSocioEconomico().getId());
		return AppConstants.EST_GRUPO_FAMILIAR_CREATE_VIEW;
	}

	/**
	 * 
	 * @return
	 */
	public String updateEstGrupoFamiliar() {
		Map params = getExternalContext().getRequestParameterMap();
		String estGrupoFamiliarDataIndex = (String) params
				.get("estGrupoFamiliarDataIndex");
		this.estGrupoFamiliar = (EstGrupoFamiliar) ((List) this.estGrupoFamiliarListModel
				.getWrappedData())
				.get(Integer.parseInt(estGrupoFamiliarDataIndex));
		
		//Consultamos los datos originales de la solicitud		
		try {
			this.solicitud = getSolicitudService().get(this.estSocioEconomico.getIdSolicitud().longValue());
		} catch (SolicitudException e) {
			e.printStackTrace();
		}

		cleanSearchValues();
		return AppConstants.EST_GRUPO_FAMILIAR_UPDATE_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelEstGrupoFamiliar() {
		cleanSearchValues();
		cleanValues();
		return AppConstants.EST_GRUPO_FAMILIAR_SEARCH_VIEW;
	}

	/**
	 *
	 * @return
	 */
	public String cancelEstGrupoFamiliarOpcion() {
		cleanValues();
		cleanSearchValues();
		return AppConstants.EST_GRUPO_FAMILIAR_OPCION_VIEW;
	}

	/**
	 * limpia el contenido de los valores que se ingresan para buscar
	 */
	public final void cleanSearchValues(){
		//estGrupoFamiliar.setIdEstSocioEconomico(new Long(0L));
		//estGrupoFamiliarSearch.setIdTipoIdentificacion(new Long(0L));
		estGrupoFamiliarSearch.setIdTipoIdentificacionStr("");
		estGrupoFamiliarSearch.setIdentificacion("");
		estGrupoFamiliarSearch.setEstado("");
	}

	/**
	 * limpia el contenido de los valores que se ingresan (Create, Update)
	 */
	public final void cleanValues(){
		estGrupoFamiliar.setId(new Long(0L));
		//estGrupoFamiliar.setIdEstSocioEconomico(new Long(0L));
		estGrupoFamiliar.setOrden(new Long(0L));
		//estGrupoFamiliar.setIdTipoIdentificacion(new Long(0L));
		estGrupoFamiliar.setIdTipoIdentificacionStr("");
		estGrupoFamiliar.setIdentificacion("");
		estGrupoFamiliar.setPrimerNombre("");
		estGrupoFamiliar.setSegundoNombre("");
		estGrupoFamiliar.setPrimerApellido("");
		estGrupoFamiliar.setSegundoApellido("");
		//estGrupoFamiliar.setIdSexo(new Long(0));
		estGrupoFamiliar.setIdSexoStr("");
		estGrupoFamiliar.setIdEstadoCivilStr("");
		estGrupoFamiliar.setIdEstadoCivil(new Long(0L));
		//estGrupoFamiliar.setIdParentezco(new Long(0L));
		estGrupoFamiliar.setIdParentezcoStr("");
		//estGrupoFamiliar.setIdEscolaridad(new Long(0L));
		estGrupoFamiliar.setIdEscolaridadStr("");
		//estGrupoFamiliar.setIdTipoOcupacion(new Long(0L));
		estGrupoFamiliar.setIdTipoOcupacionStr("");
		//estGrupoFamiliar.setIdOcupacion(new Long(0L));
		estGrupoFamiliar.setIdOcupacionStr("");
		//estGrupoFamiliar.setIdRegimenSalud(new Long(0L));
		estGrupoFamiliar.setIdRegimenSaludStr("");
		estGrupoFamiliar.setSisben("");
		//estGrupoFamiliar.setIdSisbenNivel(new Long(0L));
		estGrupoFamiliar.setIdSisbenNivelStr("");
		//estGrupoFamiliar.setIdAspectoPoblacional(new Long(0L));
		estGrupoFamiliar.setIdAspectoPoblacionalStr("");
		estGrupoFamiliar.setDiscapacitado("");
		estGrupoFamiliar.setPersonaCargo("");
		estGrupoFamiliar.setObservacion("");
		estGrupoFamiliar.setEstado("");
		this.estGrupoFamiliarListModel = new ListDataModel();

	}

	// --------------------------------------------------------------------
	// --- metodos para atender reglas de navegacion end()
	// --------------------------------------------------------------------

	// --------------------------------------------------------------------
	// --- getters and setters init()
	// --------------------------------------------------------------------

	/**
	 * 
	 */
	public EstGrupoFamiliar getEstGrupoFamiliarSearch() {
		return estGrupoFamiliarSearch;
	}

	/**
	 * 
	 * @param estGrupoFamiliarSearch
	 */
	public void setestGrupoFamiliarSearch(EstGrupoFamiliar estGrupoFamiliarSearch) {
		this.estGrupoFamiliarSearch = estGrupoFamiliarSearch;
	}

	/**
	 * 
	 * @return
	 */
	public DataModel getestGrupoFamiliarListModel() {
		return estGrupoFamiliarListModel;
	}

	/**
	 * 
	 * @param estGrupoFamiliarListModel
	 */
	public void setestGrupoFamiliarListModel(DataModel estGrupoFamiliarListModel) {
		this.estGrupoFamiliarListModel = estGrupoFamiliarListModel;
	}

	/**
	 * 
	 * @return
	 */
	public EstGrupoFamiliar getEstGrupoFamiliar() {
		return estGrupoFamiliar;
	}

	/**
	 * 
	 * @param estGrupoFamiliar
	 */
	public void setestGrupoFamiliar(EstGrupoFamiliar estGrupoFamiliar) {
		this.estGrupoFamiliar = estGrupoFamiliar;
	}

	/**
	 * obtencion del servicio estGrupoFamiliarService
	 * 
	 * @return
	 */
	public IEstGrupoFamiliarService getEstGrupoFamiliarService() {
		return estGrupoFamiliarService;
	}

	/**
	 * establecimiento del servicio estGrupoFamiliarService, la inyeccion de la
	 * dependencia la cubre SpringFramework
	 * 
	 * @param estGrupoFamiliarService
	 */
	public void setEstGrupoFamiliarService(
			IEstGrupoFamiliarService estGrupoFamiliarService) {
		this.estGrupoFamiliarService = estGrupoFamiliarService;
	}

	/**
	 * 
	 * @return
	 */
	public EstSocioEconomicoComp getEstSocioEconomico() {
		return estSocioEconomico;
	}

	/**
	 * 
	 * @param estSocioEconomico
	 */
	public void setEstSocioEconomico(EstSocioEconomicoComp estSocioEconomico) {
		this.estSocioEconomico = estSocioEconomico;
	}

	public ISolicitudService getSolicitudService() {
		return solicitudService;
	}

	public void setSolicitudService(ISolicitudService solicitudService) {
		this.solicitudService = solicitudService;
	}

	public Solicitud getSolicitud() {
		return solicitud;
	}

	public void setSolicitud(Solicitud solicitud) {
		this.solicitud = solicitud;
	}

	// --------------------------------------------------------------------
	// --- getters and setters end()
	// --------------------------------------------------------------------

}
